共计 1146 个字符,预计需要花费 3 分钟才能阅读完成。
import java.util.ArrayList;
import java.util.Scanner;
/**
* 喊7是一个传统的聚会游戏,N个人围成一圈,按顺时针从1到N编号。
* 编号为1的人从1开始喊数,下一个人喊的数字为上一个人的数字加1,但是当将要喊出来的数字是7的倍数或者数字本身含有7的话,不能把这个数字直接喊出来,而是要喊"过"。
* 假定玩这个游戏的N个人都没有失误地在正确的时机喊了"过",当喊到数字K时,可以统计每个人喊"过"的次数。
* 现给定一个长度为N的数组,存储了打乱顺序的每个人喊"过"的次数,请把它还原成正确的顺序,即数组的第i个元素存储编号i的人喊"过"的次数。
*/
public class Python_M_N_T_7 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String line = scanner.nextLine();
String[] strings = line.split(" ");
int count = 0; // 计数周期内总的喊“过”次数
for (String s : strings) {
count += Integer.parseInt(s);
}
int[] corrects = new int[strings.length]; // 存放正确的次数
int number = 1; // 从数字1开始叫
while (count > 0) {
for (int i = 0; i < corrects.length; i++) {
if ((number + "").contains("7") || number % 7 == 0) {
// 数字包含7或者能被7整除,就喊“过”,计一次
corrects[i]++;
count--;
}
if (count == 0) {
// 如果所有的“过”均已出现,就暂停
break;
}
number++; // 数字递增
}
}
StringBuilder sb = new StringBuilder();
for (int correct : corrects) {
sb.append(correct).append(" ");
}
System.out.println(sb.toString().trim());
// 输出K可能的情况 Start
ArrayList<Integer> integers = new ArrayList<>();
integers.add(number);
while (true) {
number++;
if ((number + "").contains("7") || number % 7 == 0) break;
integers.add(number);
}
System.out.println("K可能出现的数字:" + integers);
// 输出K可能的情况 End
}
}
正文完